package classes;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;

import objetos.ItemVendaObj;
import objetos.ProdutoObj;
import interfaces.CarrinhoCompra;

public class CarrinhoCompraImpl implements CarrinhoCompra {

	@Override
	public boolean adicionarItem(ItemVendaObj item, int clienteId) {
		try {
			DataSource.init();
			Connection con = DataSource.getConnection();
			Statement stm = con.createStatement();
			
			stm.execute("INSERT INTO CarrinhoCompra VALUES 	(default," +
				clienteId + QueryAssist.comma +
				item.getProduto().getId() + QueryAssist.comma +
				item.getQuantidade()  + ")");
			return true;
		} catch(IOException e) {
			System.out.println(e);
			return false;
		} catch(SQLException e) {
			System.out.println(e);
			return false;
		} catch(ClassNotFoundException e) {
			System.out.println(e);
			return false;
		}
	}

	@Override
	public boolean limparCarrinho(int clienteId) {
		try {
			DataSource.init();
			Connection con = DataSource.getConnection();
			Statement stm = con.createStatement();
			
			stm.execute("DELETE FROM CarrinhoCompra WHERE cliente_id = " + clienteId);
			
			return true;
		} catch(IOException e) {
			System.out.println(e);
			return false;
		} catch(SQLException e) {
			System.out.println(e);
			return false;
		} catch(ClassNotFoundException e) {
			System.out.println(e);
			return false;
		}
		
	}

	@Override
	public LinkedList<ItemVendaObj> produtosNoCarrinho(int clienteId) {
		try {
			DataSource.init();
			Connection con = DataSource.getConnection();
			Statement stm = con.createStatement();
			LinkedList<ItemVendaObj> list = new LinkedList<ItemVendaObj>();
			
			stm.execute("SELECT * " +
						"FROM CarrinhoCompra LEFT JOIN Produtos ON CarrinhoCompra.produto_id = Produtos.id" +
						" WHERE CarrinhoCompra.cliente_id = " + clienteId);
			ResultSet res = stm.getResultSet();
			while (res.next()) {
				ItemVendaObj item = new ItemVendaObj();
				ProdutoObj produto = new ProdutoObj();
				item.setQuantidade(res.getInt(4));
				produto.setId(res.getInt(5));
				produto.setNome(res.getString(6));
				produto.setModelo(res.getString(7));
				produto.setMarca_id(res.getInt(8));
				produto.setPreco(res.getFloat(9));
				produto.setDescricao(res.getString(10));
				produto.setPeso(res.getFloat(11));
				produto.setAltura(res.getInt(12));
				produto.setLargura(res.getInt(13));
				produto.setProfundidade(res.getInt(14));
				produto.setAtivo(res.getBoolean(15));
				item.setProduto(produto);
				
				list.add(item);
				
			}
			
			return list;
		} catch(IOException e) {
			System.out.println(e);
			return null;
		} catch(SQLException e) {
			System.out.println(e);
			return null;
		} catch(ClassNotFoundException e) {
			System.out.println(e);
			return null;
		}
	}

	@Override
	public boolean removerItem(ItemVendaObj item, int clienteId) {
		try {
			DataSource.init();
			Connection con = DataSource.getConnection();
			Statement stm = con.createStatement();
			
			stm.execute("DELETE FROM CarrinhoCompra WHERE cliente_id = " + clienteId + " AND produto_id = " + item.getProduto().getId());
			
			return true;
		} catch(IOException e) {
			System.out.println(e);
			return false;
		} catch(SQLException e) {
			System.out.println(e);
			return false;
		} catch(ClassNotFoundException e) {
			System.out.println(e);
			return false;
		}
	}

}
